package com.ssy.lingxi.logistics.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.logistics.api.dto.request.CommonIdRequest;
import com.ssy.lingxi.logistics.model.request.*;
import com.ssy.lingxi.logistics.model.response.*;

import java.util.List;

/**
 * 物流单服务类
 * @author yzc
 * @version 2.0.0
 * @date 2020/7/21
 */
public interface ILogisticsOrderService {

    /**
     * 物流单提交 - 物流单查询 - 物流单分页列表(供应商、采购商)
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<PageData<LogisticsOrderSupplierListResponse>> pageSupplierLogisticsOrder(LogisticsSubmitOrderListRequest request, UserLoginCacheDTO loginUser);

    /**
     * 物流单提交 - 待提交物流单 - 物流单分页列表(供应商、采购商)
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<PageData<LogisticsOrderSubmitListResponse>> pageSubmitLogisticsOrder(LogisticsSubmitOrderListRequest request, UserLoginCacheDTO loginUser);

    /**
     * 物流能力 - 物流单处理 - 物流单分页列表(物流服务商)
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<PageData<LogisticsOrderHandleListResponse>> pageHandleLogisticsOrder(LogisticsHandleOrderListRequest request, UserLoginCacheDTO loginUser);

    /**
     * 平台后台 - 物流管理 - 物流单分页列表
     * @param request 接口参数
     * @return 返回结果
     */
    Wrapper<PageData<LogisticsOrderPlatformListResponse>> pagePlatformLogisticsOrder(LogisticsPlatformOrderListRequest request);

    /**
     * 物流能力 - 物流管理 - 物流单查询(供应商、采购商)
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<LogisticsOrderResponse> getSupplierLogisticsOrder(OrderIdOrCodeRequest request, UserLoginCacheDTO loginUser);

    /**
     * 物流能力 - 物流管理 - 物流单查询(物流商)
     * @param request 接口参数
     * @return 返回结果
     */
    Wrapper<LogisticsOrderResponse> getHandleLogisticsOrder(OrderIdOrCodeRequest request, UserLoginCacheDTO loginUser);

    /**
     * 平台后台 - 物流管理 - 物流单查询
     * @param request 接口参数
     * @return 返回结果
     */
    Wrapper<LogisticsOrderResponse> getPlatformLogisticsOrder(CommonIdRequest request);

    /**
     * 物流能力 - 物流单管理 - 物流单添加
     * @param request 接口参数
     * @param loginUser 登录用户信息
     */
    Wrapper<Void> addLogisticsOrder(LogisticsOrderRequest request, UserLoginCacheDTO loginUser);

    /**
     * 物流能力 - 物流单管理 - 物流单修改
     * @param request 接口参数
     * @param loginUser 登录用户信息
     */
    Wrapper<Void> updateLogisticsOrder(LogisticsOrderRequest request, UserLoginCacheDTO loginUser);

    /**
     * 物流能力 - 物流单管理 - 物流单删除
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> deleteLogisticsOrder(CommonIdRequest request, UserLoginCacheDTO loginUser);

    /**
     * 物流能力 - 物流单管理 - 物流单提交
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> updateOrderStatusSubmit(CommonIdRequest request, UserLoginCacheDTO loginUser);

    /**
     * 物流能力 - 物流单管理 - 物流单确认
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> updateOrderStatusConfirm(LogisticsOrderConfirmRequest request, UserLoginCacheDTO loginUser);

    /**
     * 物流单分页列表 - 外部状态下拉查询
     * @return 返回结果
     */
    Wrapper<List<StatusVO>> listLogisticsOrderStatus();
}
